package com.qinglei.recoup.system.service.impl;

import com.qinglei.recoup.common.utils.DateUtil;
import com.qinglei.recoup.system.domain.EventLog;
import com.qinglei.recoup.system.enums.EventEnum;
import com.qinglei.recoup.system.pojo.BedStatusVO;
import com.qinglei.recoup.system.pojo.EventLogVO;
import com.qinglei.recoup.system.pojo.TourNotifyVO;
import com.qinglei.recoup.system.service.EventWsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;

@Service
public class EventWsServiceImpl implements EventWsService {
    /**
     * STOMP对象
     */
    @Autowired
    private SimpMessagingTemplate simpMessagingTemplate;

    private Integer tenantId = 1;

    /**
     * 推送床位状态消息
     *
     * @param bedStatusVO
     */
    @Override
    public void pushBedStatusMsg(BedStatusVO bedStatusVO) {
        //为了方便修改日志信息
        String statusName =  bedStatusVO.getStatusName();
        if("清醒".equals(statusName) || "睡觉".equals(statusName)){
            bedStatusVO.setStatusName("在床");
        }

        // 调式用 设置本条消息的时间戳
        bedStatusVO.setTimestamp(System.currentTimeMillis());
        // 推送单个床位
        simpMessagingTemplate.convertAndSend("/topic/bedStatus." + bedStatusVO.getBedId(), bedStatusVO);
        // 推送全院
        simpMessagingTemplate.convertAndSend("/topic/allBedStatus." + bedStatusVO.getTenantId(), bedStatusVO);
    }

    /**
     * 推送事件消息
     *
     * @param eventLogVO
     */
    @Override
    public void pushEventMsg(EventLog eventLog) {
        EventLogVO eventLogVO = new EventLogVO();
        eventLogVO.setName(eventLog.getName());
        eventLogVO.setEvtLogId(eventLog.getId());
        eventLogVO.setContent(eventLog.getContent());
        eventLogVO.setTime(DateUtil.formatFullTime(eventLog.getCreateTime(), DateUtil.FULL_TIME_CHS_PATTERN));
        if (eventLog.getTypeGroup() == EventEnum.TYPE_ALARM) {
            // 报警
            eventLogVO.setIsAlarm(1);
        }

        // 调式用 设置本条消息的时间戳
        eventLogVO.setTimestamp(System.currentTimeMillis());
        // 推送单个床位
        if (eventLog.getBedId() != null) {
            simpMessagingTemplate.convertAndSend("/topic/bedEvent." + eventLog.getBedId(), eventLogVO);
        }
        // 推送全院
//        simpMessagingTemplate.convertAndSend("/topic/allBedEvent." + tenantId, eventLogVO);
    }

    /**
     * 推送巡查通知消息
     * @param tourNotifyVO
     */
    @Override
    public void pushTourEvent(TourNotifyVO tourNotifyVO) {
        // 调式用 设置本条消息的时间戳
        tourNotifyVO.setTimestamp(System.currentTimeMillis());
        // 推送巡查通知消息
        simpMessagingTemplate.convertAndSend("/topic/tourEvent." + tourNotifyVO.getTenantId(), tourNotifyVO);
    }
}
